package com.mashibing.singleton;

/**
 * 单例模式-懒汉式
 * 存在的问题：多线程并发的时候，可以获取到多个不同的实例
 * 解决方法：通过synchronized关键字给getInstance()加锁,但是会带来效率下降问题
 */
public class Mgr04 {
    private static Mgr04 INSTANCE;
    private Mgr04(){}

    public static synchronized Mgr04 getInstance(){
        if (INSTANCE == null) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            INSTANCE = new Mgr04();
        }
        return INSTANCE;
    }

    public static void main(String[] args) {
        for (int i = 0; i <100 ; i++) {
            new Thread(()->{
                System.out.println(Mgr04.getInstance().hashCode());
            }).start();
        }
    }
}
